package cn.cnf.service;


import cn.cnf.common.enums.RecommendState;
import cn.cnf.common.enums.StateEnum;
import cn.cnf.common.enums.VerifyState;
import cn.cnf.entity.Comic;
import cn.cnf.entity.vo.ComicDetailsInfo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.service.IService;

import java.math.BigDecimal;
import java.util.List;

/**
 * 服务接口
 *
 * @author ZhuMeiYi
 * @description
 * @since 2020-12-04 15:18:43
 */
public interface ComicService extends IService<Comic> {

    /**
     * 分页查询
     *
     * @param current
     * @param pageSize
     * @return
     */
    IPage<Comic> selectPageVo(Integer current, Integer pageSize,String name);


    /**
     * 根据章节id和漫画id获得本章信息
     *
     * @param comicId
     * @param chapterId
     * @return
     */
    ComicDetailsInfo getDetails(String comicId, String chapterId);

    /**
     * 增加漫画
     *
     * @param comic
     * @return
     */
    String addOrUpdateComic(Comic comic);

    /**
     * 添加本章内容
     *
     * @param comicDetails
     * @return
     */
    String addOrUpdateDetails(ComicDetailsInfo comicDetails);

    /**
     * 模糊搜索
     *
     * @param current
     * @param pageSize
     * @param comicName
     * @return
     */
    IPage<Comic> searchByName(Integer current, Integer pageSize, String comicName);

    /**
     * 删除漫画
     *
     * @param comicId
     * @return
     */
    String delete(String comicId);

    /**
     * 删除章节图片
     *
     * @param comicId
     * @param chapterId
     * @return
     */
    String deleteChapterImg(String comicId, String chapterId);

    /**
     * 更新订阅数量
     *
     * @param subscribeId
     * @param number
     * @return
     */
    Integer updateSubscribe(String subscribeId, int number);

    /**
     * 调整作品收入
     *
     * @param comicId
     * @param num
     * @return
     */
    BigDecimal adjustComicMoneyById(String comicId, BigDecimal num);

    /**
     * 获得个人漫画
     *
     * @param currentUserName
     * @return
     */
    List<Comic> getPersonalComics(String currentUserName);


    /**
     * 推荐某作品
     *
     * @param comicId
     * @return
     */
    String recommend(String comicId, RecommendState state);

    /**
     * 获得全部推荐
     *
     * @param current
     * @param pageSize
     * @return
     */
    IPage<Comic> getAllRecommend(Integer current, Integer pageSize);

    /**
     * 获取未完全审核的漫画
     * @param current
     * @param pageSize
     * @return
     */
    IPage<Comic> getVerifying(Integer current, Integer pageSize);

    /**
     * 管理员审核漫画
     * @param comicId
     * @param state
     * @return
     */
    String comicVerify(String comicId, VerifyState state);

    /**
     * 是否作者
     * @param comicId
     * @param userId
     * @return
     */
    boolean isAuthor(String comicId,String userId);

    List<Comic> getRecentlyUpdate(Integer current, Integer pageSize);

    IPage<Comic> rank(Integer current, Integer pageSize, SFunction<Comic,Integer> getter);

    Integer updateCollectNum(String comicId, Integer value);

    Integer updateCommentNum(String comicId, Integer value);

    Integer updateState(String comicId, StateEnum state);

    IPage<Comic> getByState(Integer current, Integer pageSize, StateEnum state);

    boolean linkAuthor(JSONObject jsonObject);
}
